# ceil(x)
# 返回 x 的上限，即大于或者等于 x 的最小整数。看下示例：
# (向上取整)
import math

print(math.ceil(1.4))
# (向下取整)
# 返回 x 的向下取整，小于或等于 x 的最大整数。看下示例：
print(math.floor(1.9))

# fabs(x)
# 返回 x 的绝对值。看下示例：
print(math.fabs(-1))
# fmod(x, y)
# 返回 x/y 的余数，值为浮点数。看下示例：
print(math.fmod(5, 2))

# factorial(x)
# 返回 x 的阶乘，如果 x 不是整数或为负数时则将引发 ValueError。看下示例：
print(math.factorial(8))
# pow(x, y)
# 返回 x 的 y 次幂。看下示例：
print(math.pow(3, 3))

# fsum(iterable)
# 返回迭代器中所有元素的和。看下示例：
print(math.fsum([12, 63, 4, 7, 58, 67, 98]))

# gcd(x, y)
# 返回整数 x 和 y 的最大公约数。看下示例：
print(math.fabs(math.gcd(16, 24)))

# sqrt(x)
# 返回 x 的平方根。看下示例：
print(math.sqrt(9))

# trunc(x)
# 返回 x 的整数部分。看下示例：
print(math.trunc(1.9))

# exp(x)
# 返回 e 的 x 次幂。看下示例
print(math.exp(1.1415926))
# log(x[, base])
# 返回 x 的对数，底数默认为 e。看下示例：
print(math.log(2.718281828))

# tan(x)
# 返回 x 弧度的正切值。看下示例：
print(math.tan(math.pi / 3))
# atan(x)
# 返回 x 的反正切值。看下示例：
print(math.atan(1))

# sin(x)
# 返回 x 弧度的正弦值。看下示例：
print(math.sin(math.pi / 2))
# asin(x)
# 返回 x 的反正弦值。看下示例：
print(math.asin(1))
# cos(x)
# 返回 x 弧度的余弦值。看下示例：
print(math.cos(math.pi / 3))

# acos(x)
# 返回 x 的反余弦值。看下示例
print(math.acos(1))
print("---------------" * 3)
# decimal 模块为正确舍入十进制浮点运算提供了支持，
# 相比内置的浮点类型 float，它能更加精确的控制精度，
# 能够为精度要求较高的金融等领域提供支持。


import decimal

# Decimal()方法创建一个Decimal对象
# getcontext()的作用是获取上下文管理器，
# 上下文管理器用于控制精度和舍入规则。
# .prec 设置精度取多少位
decimal.getcontext().prec = 3
d1 = decimal.Decimal(1.1)
d2 = decimal.Decimal(9.9)
print(d1 + d2)
print(d1 - d2)
print(d1 * d2)
print(d1 / d2)

print("---------------" * 3)
# 4. random 模块
# random 模块可以生成随机数，我们来看一下其常用函数。
# random()
# 返回 [0.0, 1.0) 范围内的一个随机浮点数。看下示例：
import random

print(random.random())
# uniform(a, b)
# 返回 [a, b) 范围内的一个随机浮点数。看下示例：
print(random.uniform(1.4, 2.4))

# randint(a, b)
# 返回 [a, b] 范围内的一个随机整数。看下示例：
print(random.randint(1, 5))

# randrange(start, stop[, step])
# 返回 [start, stop) 范围内步长为 step 的一个随机整数。看下示例：
print(random.randrange(1, 10, 3))

# choice(seq)
# 从非空序列 seq 返回一个随机元素。看下示例：
print(random.choice("12345678"))
# shuffle(x[, random])
# 将序列 x 随机打乱位置。看下示例：  会报TypeError
# random.shuffle() 函数并不适用于字符串类型。
# random.shuffle() 无法直接对字符串进行原地操作，因为它违反了字符串不可变的特性。
# l = "hello"
# random.shuffle(l)
# print(l)

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
random.shuffle(list1)
print(list1)


# sample(population, k)
# 返回从总体序列或集合中选择的唯一元素的 k 长度列表，
# 用于无重复的随机抽样。看下示例：

list2 = [0,1, 2, 3, 4, 5, 6, 7, 8, 9]
print(random.sample(list2, 3))